package com.baizhi.commons;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.junit.Test;

public class ShiroDemo {
    private String userName="Zp";
    private String password="sb";

    @Test
    public void shiro(){
        IniSecurityManagerFactory iniSecurityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
        SecurityManager securityManager = iniSecurityManagerFactory.getInstance();
        //2.把安全管理器给工具类
        SecurityUtils.setSecurityManager(securityManager);
        //3.获取主体
        Subject subject = SecurityUtils.getSubject();
        //4.封装token
        UsernamePasswordToken token = new UsernamePasswordToken(userName,password);
        //5.认证
       try{
           subject.login(token);
           System.out.println("认证成功");
       }catch (Exception e){
           System.out.println("账号或密码错误");
       }

        boolean authenticated = subject.isAuthenticated();
       if(authenticated){
           //如果认证成功 执行授授权操作 校验权限和角色 代码式授权 通过代码校验对应的主体有么有权限或者角色
           System.out.println("开始授权");
           //授权校验 permission
           /**
            * 校验zp 有没有删除轮播图的权限
            *
            */
           boolean permitted = subject.isPermitted("banner:delete");
           if(permitted){
               System.out.println("有删除轮播图的方法");
           }else{
             System.out.println("没有删除轮播图的权限 可以抛异常 响应没有权限无法操作的提示信");
           }
           /**
            * 校验角色
            */

           boolean vip1 = subject.hasRole("vip1");
           if(vip1){
               System.out.println("有vip1的角色");
           }

       }

    }
}
